package com.async.designpatterns.structure.proxy;


import com.sun.deploy.util.StringUtils;

/**
 * Created by wenzhuo on 2018/1/1.
 * 代理模式: 基于 对象 的结构型模式
 * 由于某些原因需要给某对象提供一个代理以控制对该对象的访问
 * 访问对象不适合或者不能直接引用目标对象，代理对象作为访问对象和目标对象之间的中介
 * 注意：代理类持有被代理类的控制权
 */
public class Proxy implements Sourceable {

    private Source source;

    public Proxy() {
        super();
        source = new Source();
    }

    @Override
    public String getRealName() {
        String name = source.getName();
        if (name == null || name.isEmpty()) {
            name = "默认设定名称";
            return name;
        }
        return source.getName();
    }

    @Override
    public void printMethod() {
        preMethod();
        source.methodA();
        afterMethod();
    }

    private void preMethod() {
        System.out.println("方法调用前操作！");
    }

    private void afterMethod() {
        System.out.println("方法调用后操作！");
    }
}
